package com.bjpowernode.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.bjpowernode.entity.TClueRemark;
import com.bjpowernode.mapper.TClueRemarkMapper;
import com.bjpowernode.query.ClueRemarkQuery;
import com.bjpowernode.service.ClueRemarkService;
import com.bjpowernode.util.LoginInfoUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 线索备注服务实现类
 * 实现了ClueRemarkService接口，提供线索备注的业务逻辑处理
 */
@Service // Spring注解，标识这是一个服务层组件
public class ClueRemarkServiceImpl implements ClueRemarkService {
    /**
     * 线索备注数据访问对象
     * 用于与数据库交互，执行线索备注相关的CRUD操作
     */
    @Resource
    private TClueRemarkMapper tClueRemarkMapper;

    /**
     * 保存线索备注
     * @param clueRemarkQuery 线索备注查询对象，包含要保存的备注信息
     * @return 保存成功的记录数
     */
    @Override
    public int saveClueRemark(ClueRemarkQuery clueRemarkQuery) {
        // 创建线索备注实体对象
        TClueRemark tClueRemark = new TClueRemark();
        // 使用BeanUtil工具类复制属性
        BeanUtil.copyProperties(clueRemarkQuery, tClueRemark);
        // 设置创建时间
        tClueRemark.setCreateTime(new Date());
        // 设置创建人ID
        tClueRemark.setCreateBy(LoginInfoUtil.getCurrentLoginUser().getId());
        // 调用Mapper方法插入数据
        int count = tClueRemarkMapper.insertSelective(tClueRemark);
        // 返回插入结果
        return count;
    }

    /**
     * 根据线索ID分页获取线索备注列表
     * @param clueId 线索ID
     * @param current 当前页码
     * @return 分页后的线索备注列表
     */
    @Override
    public PageInfo<TClueRemark> getClueRemarkByPage(Integer clueId, Integer current) {
        // 使用PageHelper进行分页设置，每页5条记录
        PageHelper.startPage(current, 5);
        // 调用Mapper方法查询线索备注列表
        List<TClueRemark> tClueRemarks = tClueRemarkMapper.selectClueRemarkByPage(clueId);
        // 将查询结果封装成分页信息对象
        PageInfo<TClueRemark> pageInfo = new PageInfo<>(tClueRemarks);
        // 返回分页信息
        return pageInfo;
    }

    /**
     * 根据ID获取线索备注详情
     * @param id 线索备注ID
     * @return 线索备注详情
     */
    @Override
    public TClueRemark getClueRemarkDetailById(Integer id) {
        // 调用Mapper方法根据主键查询线索备注详情
        return tClueRemarkMapper.selectByPrimaryKey(id);
    }

    /**
     * 更新线索备注
     * @param clueRemarkQuery 线索备注查询对象，包含要更新的备注信息
     * @return 更新成功的记录数
     */
    @Override
    public int updateClueRemark(ClueRemarkQuery clueRemarkQuery) {
        // 创建线索备注实体对象
        TClueRemark tClueRemark = new TClueRemark();
        // 设置线索备注ID
        tClueRemark.setId(clueRemarkQuery.getClueRemarkId());
        // 设置备注内容
        tClueRemark.setNoteContent(clueRemarkQuery.getNoteContent());
        // 设置备注方式
        tClueRemark.setNoteWay(clueRemarkQuery.getNoteWay());
        // 设置编辑时间
        tClueRemark.setEditTime(new Date());
        // 设置编辑人ID
        tClueRemark.setEditBy(LoginInfoUtil.getCurrentLoginUser().getId());
        // 调用Mapper方法更新数据
        int count = tClueRemarkMapper.updateByPrimaryKeySelective(tClueRemark);
        // 返回更新结果
        return count;
    }

    /**
     * 根据ID删除线索备注
     * @param id 线索备注ID
     * @return 删除成功的记录数
     */
    @Override
    public int deleteClueRemarkById(Integer id) {
        // 调用Mapper方法根据主键删除线索备注
        return tClueRemarkMapper.deleteByPrimaryKey(id);
    }
}
